home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / WINPROGS / WINSRC20.ZIP / MAINFRAC.C < prev    next >
C/C++ Source or Header  |  1990-10-20  |  15KB  |  561 lines

  1. /*
  2.    non-windows main driver of Fractint for Windows - 
  3. */
  4.  
  5.  
  6. #define PUTTHEMHERE 1        /* stuff common external arrays here */
  7.  
  8. /* from MSC's <dos.h> */
  9. #define FP_SEG(fp) (*((unsigned _far *)&(fp)+1))
  10. #define FP_OFF(fp) (*((unsigned _far *)&(fp)))
  11.  
  12. #include "fractint.h"
  13. #include "fractype.h"
  14. #include <windows.h>
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <search.h>
  18. #include <string.h>
  19. #include <float.h>
  20. #include <ctype.h>
  21. #include <time.h>
  22.  
  23. int cmp_line(), pot_line();
  24.  
  25. LPSTR win_lpCmdLine;
  26.  
  27. extern int time_to_restart;
  28. extern int time_to_reinit;
  29. extern int time_to_quit;
  30. extern int time_to_load;
  31. extern int time_to_save;
  32. extern int time_to_print;
  33. extern int time_to_cycle;
  34.  
  35. extern char FileName[];
  36. char string004[2];
  37.  
  38. extern int xdots, ydots, colors, maxiter;
  39. extern int ytop, ybottom, xleft, xright;
  40.  
  41. int fractype;
  42. int invert;
  43.  
  44. double ftemp, xxmin, xxmax, yymin, yymax;
  45. long fudge;
  46. double xfudge;
  47.  
  48. long xvalue, yvalue, lm, linitx, linity;
  49. int maxit, bitshift, color, row, col;
  50.  
  51. int calc_status; /* -1 no fractal            */
  52.          /*  0 parms changed, recalc reqd   */
  53.          /*  1 actively calculating        */
  54.          /*  2 interrupted, resumable        */
  55.          /*  3 interrupted, not resumable   */
  56.          /*  4 completed            */
  57.  
  58. int reset_periodicity = 1;
  59. extern int kbdcount;
  60. int show_orbit = 0;
  61. int orbit_ptr = 0;
  62. int periodicitycheck;
  63. extern int debugflag;
  64. int integerfractal;
  65. extern int distest;
  66. int oktoprint = 0;
  67. extern int bitshiftless1;
  68. char usr_stdcalcmode, stdcalcmode;
  69. int  usr_distest; usr_floatflag, usr_periodicitycheck;
  70.  
  71. long creal, cimag;
  72. long delx, dely, delx2, dely2, delmin;
  73. long xmin, xmax, ymin, ymax, x3rd, y3rd;
  74. double  dxsize, dysize;        /* xdots-1, ydots-1        */
  75. double delxx, delyy, delxx2, delyy2, ddelmin, xx3rd, yy3rd;
  76. double param[4];
  77. double potparam[3];
  78. int diskvideo, savedac;
  79.  
  80. #define MAXLINE  2048
  81.  
  82. long   far *lx0, far *ly0, far *lx1, far *ly1;
  83. double far *dx0, far *dy0, far *dx1, far *dy1;
  84. extern double far temp_array[8001];
  85.  
  86. unsigned char trigndx[4];
  87.  
  88. unsigned char dacbox[257][3];
  89. double plotmx1, plotmx2, plotmy1, plotmy2;
  90. int MPOverflow;
  91. int dotmode;
  92. extern int pot16bit;
  93. int andcolor, resave_flag, timer_interval;
  94. int active_ovly;
  95.  
  96. int extraseg;
  97. int timedsave = 0;
  98. int disk16bit = 0;
  99. extern int initbatch;
  100. float far initifs3d[32][13];
  101. float far initifs[32][7];
  102. extern unsigned char readname[];
  103. unsigned char MAP_name[40] = "";
  104. int rowcount;
  105. int adapter;
  106. extern int showfile;
  107. extern int initmode;
  108. extern int overlay3d;
  109. extern int display3d;
  110. extern int filetype;
  111. int comparegif = 0;
  112. int diskisactive = 0;
  113. extern int initsavetime;
  114. int saveticks = 0;
  115. int savebase = 0;
  116. int zwidth = 0;
  117. extern int (*outln)();
  118. extern int out_line();
  119. extern int outlin16();
  120. static int call_line3d();
  121. extern int line3d();
  122. extern int gifview();
  123. extern int tgaview();
  124. int hasconfig = 0;
  125. FILE *dacfile;
  126. int mapset = 0;
  127. int reallyega = 0;
  128. int loadPalette = 0;
  129. int compiled_by_turboc = 0;
  130.  
  131. int     sxdots,sydots;
  132. int     sxoffs=0,syoffs=0;
  133. int     viewwindow=0;
  134. float   viewreduction=1;
  135. int     viewcrop=1;
  136. float   finalaspectratio;
  137. int     viewxdots=0,viewydots=0;
  138. extern int filexdots, fileydots, filecolors;
  139. int frommandel;
  140.  
  141. int debug_fastupdate;        /* debugging - update every pixel if set */
  142.  
  143. int onthelist[100];        /* list of available fractal types */
  144. int CountFractalList;           /* how many are on the list? */
  145. int CurrentFractal;        /* which one is current? */
  146.  
  147. int Printer_Resolution, Printer_Titleblock, Printer_SFrequency;
  148. int Printer_SetScreen, Printer_SStyle, Printer_Type;
  149. int Printer_ColorXlat, Printer_SAngle, LPTnumber;
  150. int video_type, no_color_text;
  151.  
  152. int active_system = WINFRAC;    /* running under windows */
  153. extern int win_display3d, win_overlay3d;
  154.  
  155. compare_fractalnames( int *element1, int *element2)
  156. {
  157. int i, j, k;
  158. for (i = 0; i < 100; i++) {
  159.     j = *element1;
  160.     k = *element2;
  161.     if (fractalspecific[j].name[i] < fractalspecific[k].name[i])
  162.         return(-1);
  163.     if (fractalspecific[j].name[i] > fractalspecific[k].name[i])
  164.         return(1);
  165.     if (fractalspecific[j].name[i] == 0)
  166.         return(0);
  167.     }
  168. return(0);
  169. }
  170.  
  171. fractint_main()
  172. {
  173. int i, j, k;
  174. long newx, newy, newxx, newyy, newxy, temp;
  175. double temp1, temp2;
  176. double dtemp, ccreal, ccimag;
  177.  
  178. CountFractalList = 0;
  179. for (k = 0; fractalspecific[k].name != NULL; k++)
  180.    if (fractalspecific[k].name[0] != '*' &&
  181.        (fractalspecific[k].flags & WINFRAC) != 0 &&
  182.        CountFractalList < 100) 
  183.             onthelist[CountFractalList++] = k;
  184. qsort(onthelist,CountFractalList,2,compare_fractalnames);
  185. CurrentFractal = fractype;
  186.  
  187. lx0 = (long far *)&temp_array[0*MAXLINE];
  188. ly0 = (long far *)&temp_array[1*MAXLINE];
  189. lx1 = (long far *)&temp_array[2*MAXLINE];
  190. ly1 = (long far *)&temp_array[2*MAXLINE];
  191. dx0 = (double far *)&temp_array[0*MAXLINE];
  192. dy0 = (double far *)&temp_array[1*MAXLINE];
  193. dx1 = (double far *)&temp_array[2*MAXLINE];
  194. dy1 = (double far *)&temp_array[2*MAXLINE];
  195. extraseg = FP_SEG(dx0);
  196.  
  197. restoredac();        /* ensure that the palette has been initialized */
  198.  
  199. win_cmdfiles();                /* SSTOOLS.INI processing */
  200.  
  201. initmode = 1;                           /* override SSTOOLS.INI */
  202.  
  203. dotmode = 1;
  204. diskvideo = 0;
  205. usr_distest = 0;
  206.  
  207. /* ----- */
  208.  
  209. debug_fastupdate = 0;
  210. calc_status = -1;
  211. resave_flag = 1;
  212. strcpy(FileName,"Fract001");
  213. if (showfile != 0) {
  214.     strcpy(readname, FileName);
  215.     }
  216. else {
  217.     if (strchr(readname,'.') == NULL)
  218.      strcat(readname,".gif");
  219.     strcpy(FileName,readname);
  220.     time_to_load = 1;
  221.     }
  222.  
  223. /*
  224.    sprintf(strlocn," %d bytes",stackavail());
  225.    stopmsg(0,"Available Stack",strlocn);
  226. */
  227.  
  228. /* ----- */
  229.  
  230. time_to_quit = 0;
  231. /* getakey(); (uncomment this to fire up Fractint waiting for instructions) */
  232. if (time_to_quit)
  233.     return(0);
  234.  
  235. reinit:
  236.     time_to_reinit = 0;
  237.  
  238.     savedac = 0;             /* don't save the VGA DAC */
  239.  
  240.     for (i = 0; i < 4; i++) {
  241.         if(param[i] != FLT_MAX)
  242.             fractalspecific[fractype].paramvalue[i] = param[i];
  243.         else
  244.             param[i] = fractalspecific[fractype].paramvalue[i];
  245.         }
  246.     ccreal = param[0]; ccimag = param[1]; /* default C-values */
  247.     frommandel = 0;
  248.  
  249.     if (xxmin > xxmax) {
  250.        dtemp = xxmin; xxmin = xxmax; xxmax = dtemp;} 
  251.     if (yymin > yymax) {
  252.        dtemp = yymin; yymin = yymax; yymax = dtemp;} 
  253.  
  254.     ytop    = 0;
  255.     ybottom = ydots-1;
  256.     xleft   = 0;
  257.     xright  = xdots-1;
  258.     filexdots = xdots;
  259.     fileydots = ydots;
  260.     filecolors = colors;
  261.  
  262. restart:
  263.     time_to_restart = 0;
  264.  
  265.     if (calc_status == -99)
  266.         calc_status = 2;            /* force a recalc */
  267.     else
  268.         calc_status = 0;            /* force a restart */
  269.  
  270.     maxit = maxiter;
  271.  
  272.     if (colors == 2 && (fractype == PLASMA || usr_stdcalcmode == 'b'))
  273.         colors = 16;         /* 2-color mode just doesn't work on these */
  274.  
  275.     andcolor = colors-1;
  276.  
  277.     debug_fastupdate = 0;    /* turn off debug-mode screen updates */
  278.     if (debugflag == 6666)
  279.         debug_fastupdate = 1;
  280.  
  281.     /* compute the (new) screen co-ordinates */
  282.     /* correct a possibly munged-up zoom-box outside the image range */
  283.     if (ytop    >= ydots) ytop    = ydots-1;
  284.     if (ybottom >= ydots) ybottom = ydots-1;
  285.     if (xleft   >= xdots) xleft   = xdots-1;
  286.     if (xright  >= xdots) xright  = xdots-1;
  287.     if (xleft == xright || ytop == ybottom) {
  288.         }
  289.     if (xleft > xright)
  290.         { i = xleft; xleft = xright; xright = i;}
  291.     if (ytop > ybottom)
  292.         { i = ybottom; ybottom = ytop; ytop = i;}
  293.     temp1 = xxmin;
  294.     temp2 = xxmax - xxmin;
  295.     xxmin = temp1 + (temp2 * xleft )/(xdots-1);
  296.     xxmax = temp1 + (temp2 * xright)/(xdots-1);
  297.     temp1 = yymin;
  298.     temp2 = yymax - yymin;
  299.     yymin = temp1 + (temp2 * (ydots - 1 - ybottom)/(ydots-1));
  300.     yymax = temp1 + (temp2 * (ydots - 1 - ytop   )/(ydots-1));
  301.     xx3rd = xxmin;
  302.     yy3rd = yymin;
  303.     xleft   = 0;
  304.     xright  = xdots-1;
  305.     ytop    = 0;
  306.     ybottom = ydots-1;
  307.  
  308. /*
  309.     delxx = (xxmax - xxmin) / (xdots-1);
  310.     delyy = (yymax - yymin) / (ydots-1);
  311.     delxx2 = delyy2 = 0.0;
  312.     ddel